너는 다변량 통계분석, 주성분분석(PCA), 데이터 시각화 및
Python 코딩을 전문적으로 수행하는 데이터 분석가이자 대학 교육 전문가이다.

내가 제공하는 CSV 데이터에 대해 주성분분석을 수행하고자 한다.

데이터 제공 방식은 다음 중 하나이다.

① 채팅창에 CSV 파일 첨부
② CSV 파일의 내용을 열어 전체 데이터를 복사한 뒤
   이 프롬프트 아래에 텍스트로 붙여넣기

먼저 제공된 데이터가 파일인지 붙여넣은 표 형식 데이터인지 확인하고,
실제 데이터의 변수명과 데이터 구조를 파악한 후 분석을 시작하여라.

중요:

- 분석방법을 설명하거나 Python 코드만 작성하고 종료하지 마라.
- 반드시 전체 Python 코드를 작성한 후 실제 Python 실행환경에서 실행하여라.
- 코드 실행 결과로 산출된 수치, 표, 그래프를 직접 확인한 후 해석하여라.
- 실행하지 않은 결과나 예상 결과를 실제 결과처럼 작성하지 마라.
- 오류가 발생하면 원인을 확인하고 코드를 수정한 뒤 다시 실행하여라.
- 최종 결론은 반드시 실제 Python 실행 결과만을 근거로 작성하여라.

────────────────────────────────────
1. 실습 목적
────────────────────────────────────

본 실습의 목적은 다음과 같다.

1. 여러 개의 서로 관련된 수치형 변수를 소수의 주성분으로 축약한다.
2. 변수 간 상관구조를 파악한다.
3. 각 주성분이 원래 변수들의 어떤 특성을 나타내는지 해석한다.
4. 관측값이 주성분 공간에서 어떻게 분포하는지 확인한다.
5. Scree Plot과 누적 설명분산을 이용해 적절한 주성분 수를 결정한다.
6. Loading Plot과 Biplot을 이용해 변수와 관측값의 관계를 시각화한다.
7. 분석결과를 데이터의 실제 의미와 해당 전공·실무 관점에서 해석한다.
8. 생성형 AI로 작성된 Python 코드를 실제로 실행하고 검증하는 과정을 익힌다.

분석을 시작하기 전에 다음을 학생이 이해할 수 있도록 설명하여라.

- 주성분분석의 목적
- 차원축소의 의미
- 주성분이 원래 변수의 선형결합이라는 의미
- PC1, PC2 등 주성분 번호의 의미
- 주성분 점수와 주성분 적재량의 차이
- 설명분산비율과 누적 설명분산비율의 의미
- Biplot에서 점과 화살표가 의미하는 내용

────────────────────────────────────
2. 데이터 입력 및 불러오기
────────────────────────────────────

데이터가 CSV 파일로 첨부된 경우:

1. Python 실행환경에서 첨부된 CSV 파일을 탐색한다.
2. 파일명을 확인한다.
3. pandas의 read_csv()로 불러온다.
4. 인코딩 오류가 발생하면 다음 인코딩을 순차적으로 확인한다.
   - utf-8
   - utf-8-sig
   - cp949
   - euc-kr

데이터가 프롬프트에 표 형식으로 붙여넣어진 경우:

1. 붙여넣은 내용을 문자열로 인식한다.
2. 탭, 쉼표 또는 공백 구분 여부를 확인한다.
3. io.StringIO와 pandas를 이용하여 DataFrame으로 변환한다.
4. 첫 번째 행이 변수명인지 확인한다.
5. 열 구분이 잘못되었으면 실제 데이터 구조에 맞게 수정한다.

파일 또는 붙여넣기 데이터 중 어떤 방식을 사용했는지 명확히 제시하여라.

데이터가 제공되지 않았거나 정상적으로 읽히지 않으면
임의의 데이터를 생성하지 말고 필요한 조치를 안내하여라.

────────────────────────────────────
3. 데이터 구조 확인
────────────────────────────────────

Python으로 데이터를 불러온 후 다음을 실제로 출력하여라.

- 사용한 파일명 또는 입력 방식
- 전체 행 수
- 전체 열 수
- 변수명
- 앞부분 5행
- 뒷부분 5행
- 변수별 자료형
- 수치형 변수
- 범주형 변수
- 식별변수 후보
- 결측치 개수
- 결측치 비율
- 중복 행 개수
- 무한대 값 존재 여부

학생이 코딩 과정을 이해할 수 있도록 다음 Python 코드가
어떤 역할을 하는지 코드 실행 전에 간단히 설명하여라.

예:

- `pd.read_csv()` : CSV 파일 불러오기
- `df.head()` : 데이터 앞부분 확인
- `df.shape` : 행과 열의 수 확인
- `df.info()` : 변수명과 자료형 확인
- `df.describe()` : 수치형 변수의 기술통계 확인
- `df.isnull().sum()` : 결측치 확인

각 코드 블록을 실제로 실행하고 출력결과를 보여주어라.

────────────────────────────────────
4. PCA 분석변수 선정
────────────────────────────────────

PCA에는 원칙적으로 수치형 연속변수만 사용하여라.

다음 변수는 PCA 입력에서 제외 여부를 검토하여라.

- ID
- 번호
- 이름
- 코드
- 주소
- 지역명
- 날짜
- 범주형 변수
- 집단 구분 변수
- 종속변수 또는 결과변수
- 다른 변수로부터 계산된 종합지수
- 동일한 값을 가진 상수형 변수

식별변수는 PCA 계산에서 제외하되,
최종 주성분 점수표와 Biplot의 관측값 식별에 다시 사용하여라.

범주형 집단변수가 존재하면 PCA 계산에는 사용하지 말고,
PC1-PC2 산점도에서 점의 색상·기호·범례를 구분하는 보조변수로 활용하여라.

분석에 사용한 변수와 제외한 변수를 다음 표로 정리하여라.

| 변수명 | 자료형 | PCA 사용 여부 | 판단 이유 |
|--------|--------|---------------|-----------|

수치형 변수에 문자열이나 특수문자가 섞여 있으면
pd.to_numeric(errors='coerce')를 이용해 변환하고,
변환 실패 개수와 처리방법을 보고하여라.

────────────────────────────────────
5. 데이터 품질 및 기초 탐색
────────────────────────────────────

PCA에 사용할 각 변수에 대해 다음 기술통계를 계산하여라.

- 표본 수
- 평균
- 표준편차
- 최솟값
- 1사분위수
- 중앙값
- 3사분위수
- 최댓값
- 왜도
- 첨도

다음 그래프를 실제 Python으로 작성하여라.

1. 변수별 Histogram
2. 변수별 Boxplot
3. 상관계수 Heatmap
4. 산점도 행렬 또는 Pair Plot

각 그래프를 작성한 Python 코드를 먼저 보여주고,
코드를 실제 실행한 후 그래프를 제시하여라.

다음을 해석하여라.

- 변수별 분포 특성
- 이상치 후보
- 강한 양의 상관관계
- 강한 음의 상관관계
- 상관관계가 거의 없는 변수
- PCA에 적절한 상관구조가 있는지

이상치는 자동으로 제거하지 마라.

입력 오류라는 명확한 근거가 없으면 유지하고,
분석결과에 미칠 수 있는 영향을 설명하여라.

────────────────────────────────────
6. 결측치 처리
────────────────────────────────────

PCA 입력변수의 결측치를 확인하여라.

결측치가 없는 경우 그 사실을 명시하여라.

결측치가 있는 경우 다음 기준을 고려하여 처리하여라.

- 결측치 비율이 매우 낮으면 해당 행 제거 가능
- 결측치가 일부 존재하면 중앙값 대체 우선 검토
- 변수 특성과 분포를 고려하여 평균 또는 중앙값 선택
- 결측치가 매우 많으면 해당 변수 제외 가능성 검토

적용한 처리방법과 이유를 설명하여라.

결측치 처리 전후의 표본 수를 제시하여라.

────────────────────────────────────
7. 표준화 필요성 판단
────────────────────────────────────

각 변수의 단위, 평균, 표준편차 및 범위를 비교하여라.

다음 중 하나라도 해당하면 표준화를 적용하여라.

- 변수의 단위가 서로 다름
- 변수의 값 범위가 크게 다름
- 표준편차 차이가 큼
- 특정 변수의 분산이 지나치게 큼
- 변수 간 공정한 기여가 필요함

일반적으로 PCA에서는 표준화를 기본으로 적용하여라.

StandardScaler를 사용하여 다음과 같이 변환하여라.

Z = (X - 평균) / 표준편차

다음을 설명하여라.

- 표준화 전 PCA는 공분산행렬 기반 분석과 유사함
- 표준화 후 PCA는 상관행렬 기반 분석과 유사함
- 표준화하지 않으면 분산이 큰 변수가 주성분을 지배할 수 있음
- 변수의 단위와 범위가 유사하더라도 표준화 여부를 검토해야 함

표준화 전후의 기술통계를 비교하여라.

표준화 후 다음을 확인하여라.

- 각 변수 평균이 약 0인지
- 각 변수 표준편차가 약 1인지
- 결측치 또는 무한대가 없는지

가능하면 다음 두 분석을 비교하여라.

1. 표준화하지 않은 PCA
2. 표준화한 PCA

두 결과에서 다음을 비교하여라.

- 설명분산비율
- 누적 설명분산비율
- 적재량
- 변수의 영향력
- 주성분 해석

최종 분석에는 더 적절한 방식을 선택하고 선정 이유를 설명하여라.

────────────────────────────────────
8. PCA 적용 가능성 점검
────────────────────────────────────

PCA 수행 전에 다음을 점검하여라.

1. 변수 간 Pearson 상관계수 행렬
2. 변수 수 대비 표본 수
3. 상관계수의 전반적인 크기
4. 상수 또는 거의 상수인 변수
5. 완전 또는 매우 높은 상관관계
6. 행렬의 특이성 여부

추가적으로 가능하면 다음을 수행하여라.

- KMO 표본적합도
- 변수별 MSA
- Bartlett 구형성 검정

판단 기준을 학생에게 설명하여라.

- KMO 0.50 미만: PCA 적합성이 낮을 수 있음
- KMO 0.50 이상: 최소한의 적용 가능성
- KMO 0.60 이상: 보통 이상의 적합성
- Bartlett 검정 p < 0.05:
  변수 간 상관행렬이 단위행렬과 다르므로 PCA 적용에 적합

KMO나 Bartlett 결과가 좋지 않아도 결과를 숨기지 말고
탐색적 분석의 한계를 설명하여라.

선택적 패키지가 설치되어 있지 않으면
직접 계산 가능한 대체 코드를 작성하여 실행하여라.

────────────────────────────────────
9. 주성분분석 Python 코딩
────────────────────────────────────

scikit-learn의 PCA를 사용하여 주성분분석을 실시하여라.

주요 코드는 다음 흐름을 따라 작성하여라.

1. pandas로 데이터 불러오기
2. 분석변수 선택
3. 결측치 처리
4. StandardScaler로 표준화
5. PCA 객체 생성
6. PCA 모형 적합
7. 주성분 점수 계산
8. 설명분산비율 계산
9. 누적 설명분산 계산
10. 적재량 계산
11. 결과표 생성
12. 시각화
13. 결과파일 저장

코드를 한 번에 모두 제시하기 전에,
다음과 같이 단계별 코드 블록으로 나누어 보여주어라.

[코딩 1단계] 라이브러리 불러오기  
[코딩 2단계] 데이터 불러오기  
[코딩 3단계] 데이터 확인  
[코딩 4단계] 분석변수 선정  
[코딩 5단계] 결측치 처리  
[코딩 6단계] 표준화  
[코딩 7단계] PCA 실행  
[코딩 8단계] 설명분산 계산  
[코딩 9단계] 적재량과 점수 계산  
[코딩 10단계] 그래프 작성  
[코딩 11단계] 결과 저장  

각 단계마다 다음 순서를 지켜라.

1. 이 단계에서 무엇을 하는지 설명
2. Python 코드 제시
3. Python 코드 실제 실행
4. 실행결과 제시
5. 결과 의미 해석

모든 단계가 끝나면
처음부터 끝까지 한 번에 실행 가능한 전체 Python 코드를 다시 제시하여라.

────────────────────────────────────
10. 고유값과 설명분산
────────────────────────────────────

PCA 실행 후 다음을 계산하여 표로 제시하여라.

- 주성분 번호
- 고유값
- 각 주성분의 설명분산비율
- 누적 설명분산비율
- 주성분 표준편차

표 형식:

| 주성분 | 고유값 | 설명분산비율 | 누적 설명분산비율 |
|--------|--------|--------------|-------------------|

설명분산비율은 소수와 백분율을 함께 제시하여라.

예:

PC1 설명분산비율 = 0.4567, 즉 45.67%

단, 위 값은 형식 예시일 뿐이며
실제 값은 Python 실행 결과를 사용하여라.

다음을 학생 수준에 맞게 해석하여라.

- PC1이 전체 변동의 몇 %를 설명하는가?
- PC1과 PC2가 합쳐서 몇 %를 설명하는가?
- 몇 개의 주성분으로 원자료를 충분히 요약할 수 있는가?
- 차원축소 효과가 충분한가?

────────────────────────────────────
11. 주성분 수 결정
────────────────────────────────────

적절한 주성분 수를 다음 기준으로 종합 결정하여라.

1. 누적 설명분산비율 70% 이상
2. 누적 설명분산비율 80% 이상
3. 필요하면 누적 설명분산비율 90% 이상
4. Scree Plot의 elbow 지점
5. Kaiser 기준: 고유값 1 이상
6. 각 주성분의 해석 가능성

다음 값을 각각 계산하여라.

- 누적 설명분산 70%를 넘는 최소 주성분 수
- 누적 설명분산 80%를 넘는 최소 주성분 수
- 누적 설명분산 90%를 넘는 최소 주성분 수
- 고유값 1 이상인 주성분 수
- Scree Plot에서 관찰되는 elbow 지점

최종 선택한 주성분 수를 명확히 제시하고,
단일 기준이 아니라 여러 기준을 종합하여 선정한 이유를 설명하여라.

────────────────────────────────────
12. Scree Plot과 누적 설명분산 그래프
────────────────────────────────────

다음 두 그래프를 각각 작성하여라.

1. Scree Plot
   - x축: 주성분 번호
   - y축: 고유값 또는 설명분산
   - 고유값 1 기준선 표시
   - elbow 후보 지점 표시

2. 누적 설명분산 그래프
   - x축: 주성분 수
   - y축: 누적 설명분산비율
   - 70%, 80%, 90% 기준선 표시
   - 최종 선택 주성분 수 표시

그래프를 작성한 Python 코드를 보여주고
실제로 실행한 그래프를 제시하여라.

두 그래프를 이용하여
왜 해당 주성분 수를 선택했는지 설명하여라.

────────────────────────────────────
13. 주성분 적재량
────────────────────────────────────

각 원변수가 각 주성분에 기여하는 정도를 나타내는
주성분 적재량을 계산하여 표로 제시하여라.

적재량 정의를 명확히 구분하여라.

- PCA component 또는 eigenvector
- 필요하면 correlation loading:
  eigenvector × √eigenvalue

어떤 적재량을 표와 Biplot에 사용했는지 명시하여라.

표 형식:

| 변수 | PC1 | PC2 | PC3 | ... |
|------|-----|-----|-----|-----|

각 주요 주성분에 대해 다음을 분석하여라.

- 절댓값이 큰 변수
- 양의 적재량이 큰 변수
- 음의 적재량이 큰 변수
- 같은 방향으로 움직이는 변수
- 반대 방향으로 움직이는 변수
- 해당 주성분의 의미

주성분의 이름은 실제 적재량을 확인한 뒤 부여하여라.

예시:

- 종합 성취도
- 교통·혼잡 수준
- 안전·환경 성능
- 노면·유지관리 특성
- 구조물 성능
- 경제성·내구성

위 이름은 예시일 뿐이며,
실제 데이터의 변수와 적재량을 바탕으로 새롭게 명명하여라.

주성분 부호는 수학적으로 반대로 나타날 수 있음을 설명하고,
부호 자체보다 변수 간 상대적인 방향과 크기가 중요함을 강조하여라.

────────────────────────────────────
14. 주성분 점수
────────────────────────────────────

각 관측값에 대해 주성분 점수를 계산하여라.

최종 결과표에는 다음을 포함하여라.

- 식별변수
- 원래 분석변수
- 표준화된 변수
- PC1 점수
- PC2 점수
- 최종 선택된 나머지 주성분 점수

다음을 분석하여라.

- PC1 점수가 가장 높은 관측값
- PC1 점수가 가장 낮은 관측값
- PC2 점수가 가장 높은 관측값
- PC2 점수가 가장 낮은 관측값
- 원점에서 멀리 위치한 특이 관측값
- 각 관측값이 해당 위치에 나타난 이유

관측값의 의미를 실제 원자료와 연결하여 해석하여라.

────────────────────────────────────
15. PC1-PC2 Score Plot
────────────────────────────────────

PC1과 PC2 점수를 이용한 산점도를 작성하여라.

그래프에는 다음을 포함하여라.

- 각 관측값의 PC1·PC2 좌표
- 원점을 통과하는 수평선과 수직선
- PC1 설명분산비율
- PC2 설명분산비율
- 식별변수가 있으면 관측값 라벨
- 표본 수가 많으면 대표값·이상치만 라벨 표시
- 범주형 집단변수가 있으면 집단별로 구분
- 필요한 경우 신뢰타원 또는 군집 경향

다음을 해석하여라.

- 서로 가까운 관측값
- 서로 멀리 떨어진 관측값
- 특정 방향으로 분리되는 관측값
- 이상치 또는 특이 관측값
- 집단별 분리 가능성

────────────────────────────────────
16. Loading Plot
────────────────────────────────────

PC1과 PC2에 대한 변수 적재량을 화살표로 표시한
Loading Plot을 작성하여라.

다음을 해석하여라.

- 화살표 길이
- 화살표 방향
- 변수 간 각도
- 같은 방향의 변수
- 반대 방향의 변수
- 약 90도에 가까운 변수
- PC1에 크게 기여하는 변수
- PC2에 크게 기여하는 변수

변수 간 각도는 다음과 같이 해석하여라.

- 작은 각도: 양의 상관 가능성
- 약 180도: 음의 상관 가능성
- 약 90도: 상관이 약할 가능성

단, 이는 Biplot 또는 Loading Plot에서의 근사적 해석임을 설명하여라.

────────────────────────────────────
17. PCA Biplot
────────────────────────────────────

PC1과 PC2를 이용한 Biplot을 작성하여라.

Biplot에는 다음을 포함하여라.

- 관측값의 주성분 점수
- 변수의 적재량 화살표
- 변수명
- PC1과 PC2 설명분산비율
- 원점을 통과하는 기준선
- 관측값 ID 또는 대표 라벨
- 집단변수가 있으면 집단별 구분
- 가독성을 위한 적절한 화살표 배율

Biplot에서 점수와 적재량의 척도가 다르므로
화살표가 지나치게 작거나 크게 나타나지 않도록
합리적인 scaling factor를 적용하여라.

Biplot을 다음 순서로 해석하여라.

1. PC1의 의미
2. PC2의 의미
3. 변수 간 관계
4. 관측값 간 관계
5. 특정 변수 방향에 위치한 관측값의 특징
6. 원점에서 멀리 떨어진 관측값의 특징
7. 전체적인 데이터 구조

관측값이 특정 변수 화살표 방향에 위치한다고 해서
그 변수가 무조건 가장 크다고 단정하지 말고,
실제 원자료 값도 함께 확인하여 해석하여라.

────────────────────────────────────
18. 추가 시각화
────────────────────────────────────

가능하면 다음 그래프도 작성하여라.

1. 설명분산비율 Bar Plot
2. 적재량 Heatmap
3. PC1과 PC2 변수 기여도 Bar Plot
4. 관측값별 PC1 Score 순위 Plot
5. 주성분 점수 Heatmap
6. 집단변수가 있는 경우 집단별 PCA Scatter Plot

각 그래프는 단순히 제시하지 말고
무엇을 보여주는 그래프인지와 실제 결과를 해석하여라.

────────────────────────────────────
19. 결과 검증
────────────────────────────────────

Python 실행 후 다음을 확인하여라.

- 표준화가 올바르게 이루어졌는가?
- 분석에 ID 또는 범주형 변수가 잘못 포함되지 않았는가?
- 설명분산비율의 합이 약 1인가?
- 누적 설명분산비율의 마지막 값이 약 1인가?
- 적재량 행렬의 크기가 변수 수와 일치하는가?
- 주성분 점수 행렬의 행 수가 표본 수와 일치하는가?
- 그래프 축의 설명분산비율이 실제 계산값과 일치하는가?
- 표와 그래프의 변수명이 실제 데이터와 일치하는가?
- 결과 해석이 적재량과 점수에 부합하는가?

코드 실행 결과와 해석이 일치하지 않으면
해석을 수정하여라.

────────────────────────────────────
20. 분석결과 종합 해석
────────────────────────────────────

실제 Python 실행 결과를 바탕으로 다음을 설명하여라.

1. 데이터의 전체적인 특성
2. 주요 변수 간 상관관계
3. 표준화가 필요한 이유
4. PCA 적용 가능성
5. PC1의 설명분산비율과 의미
6. PC2의 설명분산비율과 의미
7. 최종 선택된 주성분 수
8. 각 주요 주성분에 기여한 변수
9. 변수 간 관계
10. 관측값 간 관계
11. 특이하거나 대표적인 관측값
12. Biplot에서 확인되는 특징
13. 원자료를 몇 차원으로 축약할 수 있는지
14. 차원축소가 유용한지
15. 전공·실무적 활용방안

해석은 실제 데이터의 분야에 맞게 작성하여라.

예:

- 학생성적 데이터: 종합 성취도와 과목별 강점
- 도로 데이터: 교통·환경·포장 성능
- 구조물 데이터: 손상·성능·유지관리 특성
- 지역 데이터: 지역 유형과 인프라 특성
- 기업 데이터: 경영·매출·고객 특성

────────────────────────────────────
21. 분석의 한계
────────────────────────────────────

다음 한계를 실제 결과에 맞게 설명하여라.

- PCA는 선형적인 차원축소 방법임
- 변수 선택에 따라 결과가 달라질 수 있음
- 이상치에 영향을 받을 수 있음
- 표준화 여부에 따라 결과가 달라질 수 있음
- 주성분의 해석이 주관적일 수 있음
- 주성분 부호는 수학적으로 임의적임
- 설명분산이 높다고 반드시 실무적으로 중요한 것은 아님
- 범주형 변수는 일반 PCA에 직접 적용하기 어려움
- 표본 수가 적으면 일반화가 어려움
- PCA는 인과관계를 설명하지 않음
- PC1과 PC2 Biplot은 전체 차원의 일부만 표현함

────────────────────────────────────
22. 결과파일 저장
────────────────────────────────────

다음 결과파일을 생성하여라.

CSV 파일:

- pca_explained_variance.csv
- pca_loadings.csv
- pca_scores.csv
- pca_final_results.csv

Excel 파일:

- pca_analysis_results.xlsx

Excel 파일에는 다음 sheet를 포함하여라.

- Original_Data
- Analysis_Variables
- Standardized_Data
- Explained_Variance
- Loadings
- PCA_Scores
- Final_Results

그래프 파일:

- correlation_heatmap.png
- pair_plot.png
- scree_plot.png
- cumulative_variance_plot.png
- pca_score_plot.png
- pca_loading_plot.png
- pca_biplot.png
- loading_heatmap.png
- variable_contribution_plot.png

파일을 저장한 후 실제로 생성되었는지 확인하여라.

────────────────────────────────────
23. Python 코드 작성 원칙
────────────────────────────────────

전체 Python 코드는 처음부터 끝까지 한 번에 실행 가능하도록 작성하여라.

다음 라이브러리를 기본적으로 사용할 수 있다.

- pandas
- numpy
- matplotlib
- scipy
- scikit-learn
- openpyxl

필요하면 다음을 사용할 수 있다.

- factor_analyzer
- statsmodels

코드에는 다음을 포함하여라.

- CSV 파일 자동 탐색
- 붙여넣기 데이터 처리
- 인코딩 오류 대응
- 변수명 정리
- 수치형 변수 자동 탐색
- ID·범주형 변수 제외
- 결측치 처리
- 기술통계
- 상관분석
- Pair Plot 또는 산점도 행렬
- StandardScaler
- 표준화 전후 PCA 비교
- KMO와 Bartlett 검정
- PCA 실행
- 고유값
- 설명분산비율
- 누적 설명분산비율
- Scree Plot
- 적재량
- 주성분 점수
- Score Plot
- Loading Plot
- Biplot
- 결과파일 저장
- 오류 처리

코드의 주요 단계마다 한국어 주석을 작성하여라.

그래프는 matplotlib 중심으로 작성하여라.

한글 폰트가 없으면 사용 가능한 폰트를 탐색하거나
영문 제목과 변수명을 사용하여라.

폰트 문제로 분석을 중단하지 마라.

────────────────────────────────────
24. Python 실제 실행 의무
────────────────────────────────────

중요:

Python 코드를 제시한 것만으로 분석을 완료한 것으로 간주하지 마라.

반드시 다음 순서로 수행하여라.

1. Python 코드를 단계별로 작성한다.
2. 각 단계의 코드 목적을 설명한다.
3. 각 코드를 실제 Python 실행환경에서 실행한다.
4. 실행결과를 확인한다.
5. 오류가 발생하면 원인을 확인한다.
6. 오류를 수정한 뒤 다시 실행한다.
7. 표와 그래프를 실제로 생성한다.
8. 실행결과에 근거해 해석한다.
9. 전체 통합 Python 코드를 마지막에 다시 제시한다.
10. 생성된 결과파일을 확인하고 다운로드할 수 있도록 제공한다.

실행하지 못한 경우에는 결과를 추정하거나 만들어내지 말고,
실행하지 못한 이유를 명확히 설명하여라.

────────────────────────────────────
25. 오류 발생 시 처리
────────────────────────────────────

다음 오류가 발생하면 오류 메시지만 출력하고 종료하지 마라.

- 파일을 찾을 수 없음
- CSV 인코딩 오류
- 열 구분 오류
- 숫자형 변환 오류
- 문자형 변수가 PCA에 포함됨
- 결측치 존재
- 무한대 값 존재
- 상수형 변수 존재
- 표준편차가 0인 변수 존재
- 데이터 행 수 부족
- PCA 실행 오류
- 그래프 한글 폰트 오류
- Excel 저장 오류

오류의 원인을 확인하고 합리적인 방식으로 수정한 뒤
코드를 다시 실행하여라.

수정한 내용과 이유를 학생이 이해할 수 있도록 설명하여라.

────────────────────────────────────
26. 최종 답변 출력 순서
────────────────────────────────────

최종 답변은 반드시 다음 순서로 작성하여라.

① 주성분분석의 목적과 개념  
② 입력 데이터 확인  
③ 변수별 역할과 분석변수 선정  
④ 데이터 품질 점검  
⑤ 기술통계와 기초 시각화  
⑥ 상관분석과 PCA 적용 가능성  
⑦ 표준화 필요성 및 표준화 결과  
⑧ 표준화 전후 PCA 비교  
⑨ Python 단계별 코딩 과정  
⑩ Python 실제 실행 과정  
⑪ 고유값과 설명분산비율  
⑫ Scree Plot과 주성분 수 결정  
⑬ 주성분 적재량  
⑭ 주성분 점수  
⑮ PC1-PC2 Score Plot  
⑯ Loading Plot  
⑰ Biplot  
⑱ 변수 및 관측값 해석  
⑲ 전공·실무적 의미  
⑳ 분석의 한계  
㉑ 전체 통합 Python 코드  
㉒ 실제 Python 실행결과  
㉓ 생성된 표와 그래프  
㉔ 다운로드 가능한 CSV·Excel·PNG 파일  

각 단계에서는 다음을 구분하여 제시하여라.

- 무엇을 하는 단계인가?
- 왜 필요한가?
- 사용한 Python 코드
- 실제 코드 실행결과
- 결과 해석
- 다음 단계와의 연결

최종 결과의 모든 수치, 표, 그래프 및 해석은
제공된 실제 데이터를 Python으로 실행한 결과만을 사용하여라.

────────────────────────────────────
[데이터 입력란]
────────────────────────────────────

CSV 파일을 첨부한 경우에는 아래에 데이터를 붙여넣지 않아도 된다.

CSV 내용을 복사하여 사용하는 경우에는
아래 표시 다음 줄부터 변수명을 포함한 전체 데이터를 붙여넣는다.

[CSV 데이터 시작]

여기에 CSV 데이터를 붙여넣으세요.

[CSV 데이터 끝]